<template>
  <view class="content">
    <button @click="startRecording" :disabled="isRecording">开始录音</button>
    <button @click="stopRecording" :disabled="!isRecording">停止录音</button>
    <view>倒计时: {{ countdown }} 秒</view>
    <view v-if="audioPath">录音文件路径: {{ audioPath }}</view>

    <!-- 播放控制按钮 -->
    <button v-if="audioPath && !isPlaying" @click="playAudio">播放录音</button>
    <button v-if="isPlaying" @click="pauseAudio">暂停播放</button>
    <button v-if="isPaused" @click="resumeAudio">继续播放</button>
    <button v-if="isPlaying || isPaused" @click="stopAudio">停止播放</button>

    <!-- 播放进度 -->
    <!-- <view v-if="audioPlayer">播放进度: {{ currentPosition.toString().toFixed(2) }} / {{ totalDuration.toFixed(2) }} 秒</view> -->
    <view v-if="audioPlayer">播放进度: {{ currentPosition }} / {{ totalDuration }} 秒</view>
  </view>
</template>

<script setup>
import { ref, onUnmounted } from 'vue';
import { sendLog } from '@/common/js/utils/index.js';

// 响应式数据
const recorder = ref(null); // 录音对象
const countdown = ref(30); // 倒计时
const timer = ref(null); // 定时器
const audioPath = ref(''); // 录音文件路径
const audioPlayer = ref(null); // 音频播放对象
const playEndTimer = ref(null); // 播放结束检测定时器
const currentPosition = ref(0); // 当前播放位置
const totalDuration = ref(0); // 音频总长度
const isPlaying = ref(false); // 是否正在播放
const isPaused = ref(false); // 是否暂停
const isRecording = ref(false); // 是否正在录音

// 开始录音
const startRecording = () => {
  if (!recorder.value) {
    // 创建录音对象
    recorder.value = plus.audio.getRecorder({
      format: 'mp3', // 录音文件格式
      numberOfChannels: 1, // 录音通道数
      sampleRate: 44100 // 采样率
    });
  }

  // 开始录音
  recorder.value.record(
    {
      filename: '_doc/audio/', // 录音文件保存路径（_doc 是应用私有目录）
      name: 'record.mp3' // 录音文件名
    },
    (filePath) => {
      console.log('录音文件路径:', filePath);
      audioPath.value = filePath; // 保存录音文件路径
    },
    (error) => {
      console.error('录音失败:', error);
    }
  );

  // 更新录音状态
  isRecording.value = true;

  // 开始倒计时
  countdown.value = 30;
  timer.value = setInterval(() => {
    if (countdown.value > 0) {
      countdown.value--;
    } else {
      clearInterval(timer.value);
      stopRecording();
    }
  }, 1000);
};

// 停止录音
const stopRecording = () => {
  if (recorder.value) {
    recorder.value.stop(); // 停止录音
    clearInterval(timer.value); // 清除倒计时
    countdown.value = 0;
    isRecording.value = false; // 更新录音状态
  }
};

// 播放录音
const playAudio = () => {
  if (audioPath.value) {
    if (!audioPlayer.value) {
      // 创建音频播放对象
      audioPlayer.value = plus.audio.createPlayer(audioPath.value);

      // 获取音频总长度
      try {
        totalDuration.value = audioPlayer.value.getDuration();
        const num_1 = audioPlayer.value.getDuration();
        const num_2 = totalDuration.value;
        setTimeout(() => {
          sendLog({
            type1: 'audio',
            num_11: num_1,
            num_22: num_2,
            totalD2uration: totalDuration.value
          });
        });
      } catch (e) {
        console.error('获取音频总长度失败:', e);
        sendLog({
          type2: 'audio',
          error: e.message
        });
      }
    }

    // 播放录音
    audioPlayer.value.play();
    isPlaying.value = true;
    isPaused.value = false;

    // 监听播放结束事件
    clearInterval(playEndTimer.value); // 清除之前的定时器
    playEndTimer.value = setInterval(() => {
      if (audioPlayer.value) {
        currentPosition.value = audioPlayer.value.getPosition(); // 获取当前播放位置

        // 如果当前播放位置接近总长度，则认为播放结束
        if (currentPosition.value >= totalDuration.value - 0.1) {
          console.log('录音播放结束');
          clearInterval(playEndTimer.value); // 清除定时器
          isPlaying.value = false;
          isPaused.value = false;
        }
      }
    }, 200); // 每 200ms 检查一次
  }
};

// 暂停播放
const pauseAudio = () => {
  if (audioPlayer.value && isPlaying.value) {
    audioPlayer.value.pause(); // 暂停播放
    isPlaying.value = false;
    isPaused.value = true;
  }
};

// 继续播放
const resumeAudio = () => {
  if (audioPlayer.value && isPaused.value) {
    audioPlayer.value.resume(); // 继续播放
    isPlaying.value = true;
    isPaused.value = false;
  }
};

// 停止播放
const stopAudio = () => {
  if (audioPlayer.value) {
    audioPlayer.value.stop(); // 停止播放
    clearInterval(playEndTimer.value); // 清除定时器
    isPlaying.value = false;
    isPaused.value = false;
    currentPosition.value = 0; // 重置播放位置
  }
};

// 页面卸载时停止录音并释放资源
onUnmounted(() => {
  stopRecording();
  stopAudio();

  // 销毁音频播放对象
  if (audioPlayer.value) {
    audioPlayer.value.release();
  }

  // 清除播放结束检测定时器
  clearInterval(playEndTimer.value);
});
</script>

<style>
.content {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  height: 100vh;
}

button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}
</style>
